﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BOL.CentroCosto
{
    public  class DocumentoCompraInfo
    {

        public DocumentoCompraInfo()
        {
        }

        /// <summary>
        /// para el caso de  formularios carga inicial
        /// </summary>
        /// <param name="idInternal"></param>
        /// <param name="RUC"></param>
        /// <param name="idOrden"></param>
        /// <param name="idProveedor"></param>
        /// <param name="proveedor"></param>
        /// <param name="tipoDocumento"></param>
        /// <param name="tipoDoc"></param>
        /// <param name="numDocumento"></param>
        /// <param name="fechaEmision"></param>
        /// <param name="fechaVencimiento"></param>
        /// <param name="numDiasVen"></param>
        /// <param name="fechaPago"></param>
        /// <param name="idMoneda"></param>
        /// <param name="tipoCambio"></param>
        /// <param name="totalDoc"></param>
        /// <param name="igvDoc"></param>
        /// <param name="impInafecto"></param>
        /// <param name="impISC"></param>
        /// <param name="IGV"></param>
        /// <param name="usuario"></param>
        public DocumentoCompraInfo(int idInternal,
                                    string RUC,
                                    int idOrden,
                                    char tipoAnexo,
                                    char tipoProveedor,
                                    int? idProveedor,
                                    int? idEmpleado,
                                    string proveedorEmpleado,
                                    string tipoDocumento,
                                    string tipoDocumentoStr,
                                    int tipoDoc,
                                    string numDocumento,
                                    DateTime fechaEmision,
                                    DateTime fechaVencimiento,
                                    int numDiasVen,
                                    DateTime fechaPago,
                                    string glosa,
                                    int idMoneda,
                                    decimal tipoCambio,
                                    decimal totalDoc,
                                    decimal igvDoc,
                                    decimal impInafecto,
                                    decimal impISC,
                                    decimal IGV,
                                    string  usuario)
        {
            this.IGV = IGV;
            this.RUC = RUC;
            
            this.idOrden = idOrden;
            this.tipoDocumento=tipoDocumento;
            this.tipoDocumentoStr = tipoDocumentoStr;
            this.numDocumento=numDocumento;
            this.fechaEmision=fechaEmision;
            this.fechaVencimiento=fechaVencimiento;
            this.numDiasVen=numDiasVen;
            this.fechaPago=fechaPago;                 
            this.idMoneda=idMoneda;
            this.tipoCambio=tipoCambio;
            this.totalDoc=totalDoc;                      
            this.igvDoc=igvDoc;
            this.impInafecto=impInafecto;
            this.impISC=impISC;
            this.usuario = usuario;
            
            //----------
            this.tipoAnexo = tipoAnexo;
            this.tipoProveedor = tipoProveedor;  
            this.idProveedor = idProveedor;
            this.idEmpleado = idEmpleado;
            this.proveedor = proveedorEmpleado;
            this.idEmpleado = idEmpleado;
            //-

            this.tipoDoc=tipoDoc;
            this.netoDoc = totalDoc - igvDoc;
            this.idInternal=idInternal;

            SetTipoDoc(this.tipoDoc,this.tipoDocumento,tipoDocumentoStr);
            //-----------------------------------




            this.glosa = glosa;
            
            
            

        }

        public void SetTipoDoc(int tipoDoc, string tipoDocumento, string tipoDocumentoStr)
            {
            //------------------CALCULOS
                this.Renta4ta=0;
                this.importeNeto = this.totalDoc;
                this.tipoDoc=tipoDoc;
                this.tipoDocumento=tipoDocumento ;
                this.tipoDocumentoStr = tipoDocumentoStr;
                this.tipoProveedor = 'P';
   
                if (this.tipoDoc == 3) //Recibo Honorario
                {
                     if (totalMN >= 1500) //honorarios
                    {
                        this.Renta4ta = Math.Round(this.totalDoc * 0.1m, 2);
                        this.importeNeto = this.totalDoc - this.Renta4ta;   //solo para visualizar,
                         // no debe ser guardado en DB
                        this.igvDoc = 0;
                        this.netoDoc = 0;
                    }

                     this.tipoProveedor = 'H';
                }
                if (this.tipoDoc != 2 & this.tipoDoc!=3 & this.tipoDoc == 6)
                {
                    // caso que tambien sea planilla movilidad

                    this.igvDoc = 0;
                    this.netoDoc = totalDoc;
                }
                if (this.tipoDoc== 2 | this.tipoDoc == 6)
                {
                    this.netoDoc= Math.Round(totalDoc/(1+IGV/100),2);
                    this.igvDoc= totalDoc - netoDoc;
                    this.Renta4ta= 0;
                    this.importeNeto=0;

                }

                if (this.tipoDoc == 6) // nota de credito
                {
                    //para el caso de nota credito, pues se toma para comparar su facturacion 
                    //totalMonOrig = totalDoc;
                    this.glosa = "FT REF:";
                }
                if (this.tipoDoc == 17)
                {
                    // caso que tambien sea planilla movilidad
                    this.tipoProveedor = 'T';
                    this.igvDoc = 0;
                    this.netoDoc = totalDoc;
                }
           
            }

       public void SetTipoProvision(string cuentaContable,string tipoProvicion,char tipoAnexo,string anexo)
       {
          
        this.cuentaContable=cuentaContable;
        this.tipoProvicion=tipoProvicion; 
        this.tipoAnexo=tipoAnexo;
        this.anexo = anexo;
       }


       
        public decimal IGV { get; set; }
        public int idOrden { get; set; }
        public int idInternal { get; set; }
        public string RUC { get; set; }
        
        public int? idProveedor { get; set; }
        public int? idEmpleado { get; set; }
               
        public string proveedor { get; set; }
        
        
        public string tipoDocumento { get; set; }
        public string tipoDocumentoStr { get; set; }
        public int tipoDoc { get; set; }
        public string numDocumento { get; set; }
        public DateTime fechaEmision { get; set; }
        public DateTime fechaVencimiento { get; set; }
        public string glosa { get; set; }


        public char tipoProveedor { get; set; }
        public int numDiasVen { get; set; }
        public DateTime fechaPago { get; set; }
        public int idMoneda { get; set; }
        public decimal tipoCambio { get; set; }
        
        public decimal igvDoc { get; set; }

        public decimal totalDoc { get; set; }
        public decimal netoDoc { get; set; }


        public decimal impInafecto { get; set; }
        public decimal impISC { get; set; }

        
        //-------------------------------------  SOLO GESPAG
        public decimal totalMN
        {
            get
            {
                decimal total = (tipoDoc == 3 ? importeNeto : totalDoc);


                return (idMoneda == 3 ? total : total * this.tipoCambio); 
            }
        }
        public decimal netoTotalMN { 
            get 
        
        { 
            
            return   totalMN-IGVTotalMN-Renta4ta;
        
        } 
        
        }
        public decimal IGVTotalMN { 
            get {


                return (idMoneda == 3 ? igvDoc : igvDoc * this.tipoCambio); 
                } 
        }
        public decimal totalUS {
        get
            {
                decimal total = (tipoDoc == 3 ? importeNeto : totalDoc);

                return (idMoneda == 4 ? total : total / this.tipoCambio); 
            }
        }
        //-----------------------------------

        //-----------------------------------SOLO NETLOG GUARDAR

        public decimal totalSOL
        {
            get
            {



                return (idMoneda == 3 ? this.totalDoc : totalDoc * this.tipoCambio);
            }
        }
        public decimal netoTotalSOL
        {
            get
            {

                return totalSOL - IGVTotalSOL ;

            }

        }
        public decimal IGVTotalSOL
        {
            get
            {


                return (idMoneda == 3 ? igvDoc : igvDoc * this.tipoCambio);
            }
        }
        public decimal totalDOL
        {
            get
            {
             return (idMoneda == 4 ? this.totalDoc : this.totalDoc / this.tipoCambio);
            }
        }

        //------------------------------------

        public string usuario { get; set; }

       // para el caso de RECIBO HONORARIO
        public decimal importeNeto { get; set; }
        public decimal Renta4ta { get; set; }
       //------------------------------------------

        public string fechaEmisionStr { get { return fechaEmision.ToShortDateString(); } }
        public string fechaVencimientoStr { get { return fechaVencimiento.ToShortDateString(); } }
        public string fechaPagoStr { get { return fechaPago.ToShortDateString(); }  }
                             
    
        public bool isHonorario { get { return (tipoDoc == 3 ? true : false); } }
        public bool isDocumento { get { return (tipoDoc != 3 ? true : false); } }

        //------------------------------------------

        //actualizacion de  Centro de Costo
        //-----------------------------
        
        public string cuentaContable { get; set; }
        public string tipoProvicion { get; set; }
        public char tipoAnexo { get; set; }
        public string anexo { get; set; }
                                   
        //-------------------------------------------

        public int idSubDiario { get; set; }
        public int idSucursal  { get; set; }
        public int idPlanCuenta  { get; set; }
        public int idTipoAnexo  { get; set; }
        public int idAnexoRef  { get; set; }
        public int fechaContable  { get; set; }
        public int idTipoDetraccion  { get; set; }
        public int idCodDetraccion  { get; set; }
        public int NumeroAsiento { get; set; }



        //-----------------------------
        /// <summary>
        /// para el ingreso de documentos en el FR
        /// </summary>
        /// <param name="glosa"></param>
        /// <param name="tipoProveedor"></param>
        /// <param name="tipoDocumento"></param>
        /// <param name="tipoDocumentoStr"></param>
        /// <param name="tipoDoc"></param>
        /// <param name="IGV"></param>
        /// <param name="fechaEmision"></param>
        /// <param name="fechaVencimiento"></param>
        /// <param name="fechaPago"></param>
        /// <param name="tipoCambio"></param>
        /// <param name="totalDoc"></param>
        /// <param name="igvDoc"></param>
        /// <param name="impInafecto"></param>
        /// <param name="impISC"></param>
        public void setFactura(string glosa,
                                     string numDocumento,
                                     string tipoDocumento,
                                     string tipoDocumentoStr,
                                     int tipoDoc,
                                     decimal IGV,
                                     DateTime fechaEmision,
                                     DateTime fechaVencimiento,
                                     DateTime fechaPago,
                                     decimal tipoCambio,
                                     decimal netoDoc,
                                     decimal totalDoc,
                                     decimal igvDoc,
                                     decimal impInafecto,
                                     decimal impISC )
                        
        {
                                    this.glosa= glosa;
                                    this.tipoProveedor = 'P';
                                    this.numDocumento = numDocumento;
                                    this.tipoDocumento = tipoDocumento;
                                    this.tipoDocumentoStr = tipoDocumentoStr;
                                    this.tipoDoc = tipoDoc;
                                    this.IGV = IGV;
                                    this.fechaEmision = fechaEmision;
                                    this.fechaVencimiento = fechaVencimiento;
                                    this.fechaPago = fechaPago;
                                    this.tipoCambio = tipoCambio;
                                    this.netoDoc = netoDoc;
                                    this.totalDoc = totalDoc;
                                    this.igvDoc = igvDoc;
                                    this.impInafecto = impInafecto;
                                    this.impISC = impISC;
                                   


        }

        /// <summary>
        /// Para el rgistor del FR
        /// </summary>
        /// <param name="glosa"></param>
        /// <param name="tipoProveedor"></param>
        /// <param name="tipoDocumento"></param>
        /// <param name="tipoDocumentoStr"></param>
        /// <param name="tipoDoc"></param>
        /// <param name="IGV"></param>
        /// <param name="fechaEmision"></param>
        /// <param name="fechaVencimiento"></param>
        /// <param name="fechaPago"></param>
        /// <param name="tipoCambio"></param>
        /// <param name="totalDoc"></param>
        /// <param name="importeNeto"></param>
        /// <param name="Renta4ta"></param>
         public void SetHonorario( string glosa,
                                     string numDocumento,
                                    
                                     string tipoDocumento,
                                     string tipoDocumentoStr,
                                     int tipoDoc,
                                    decimal IGV,
                                    DateTime fechaEmision,
                                    DateTime fechaVencimiento,
                                    DateTime fechaPago,
                                    decimal tipoCambio,
                                     decimal totalDoc,
                                     decimal importeNeto ,
                                     decimal Renta4ta
                                     )

                          
        {
           // para el caso de RECIBO HONORARIO

            this.glosa = glosa;
            this.tipoProveedor = 'H';
            this.numDocumento = numDocumento;
            this.tipoDocumento = tipoDocumento;
            this.tipoDocumentoStr = tipoDocumentoStr;
            this.tipoDoc = tipoDoc;
            this.IGV = IGV;
            this.fechaEmision = fechaEmision;
            this.fechaVencimiento = fechaVencimiento;
            this.fechaPago = fechaPago;
            this.tipoCambio = tipoCambio;
            this.totalDoc = totalDoc;
            this.importeNeto = importeNeto;
            this.Renta4ta = Renta4ta;

            
           
        }

    }
}
